<?
	Class CRUD implements IController {

		function __construct() {
			$this->context = preg_replace('/Controller/','',get_called_class());
			
			$this->model = Model::Load($this->context.'/'.$this->context.'Model');
		}

		function indexAction() {
			View::S()->{$this->context} = $this->model->Read();
		}

		function createAction($data=array()) {
				$data = $data?$data:Request::S()->post;
				if(Request::S()->post&&!Validation::S()->errors) {
					$pk = $this->model->GetPK();
					$table_info = $this->model->table_info();
					// это для SQLite, чтобы не ругалась на пустое значение для автоинкрементного поля
					if(isset($data[$pk])&&!$data[$pk]) unset($data[$pk]);

					//если поле не существует в БД, удаляем его из $data
					foreach($data as $k=>$d) if(!$table_info[$k]) unset($data[$k]);
					
					View::S()->{$this->context} = $this->model->Read($this->model->Create($data));
					$this->message(array('ok'=>'__created'));
				}
			
		}

		function readAction() {
			$id = Uri::S()->fragment(2);
			View::S()->{$this->context} = $this->model->Read($id);

		}

		function updateAction($data=array()) {
				$id = Uri::S()->fragment(2);
				$data = $data?$data:Request::S()->post;
				
				if(Request::S()->post&&!Validation::S()->errors) {
						$table_info = $this->model->table_info();
						//если поле не существует в БД, удаляем его из $data
						foreach($data as $k=>$d) if(!$table_info[$k]) unset($data[$k]);
						$this->model->Update($data,$id);
						$this->message(array('ok'=>'__updated'));
				}

				View::S()->{$this->context} = $this->model->Read($id);
		
		}

		function deleteAction() {
			$id = Uri::S()->fragment(2);
			$this->model->Delete($id);
			$this->redirect(__SITE_LIVE.$this->context,array('ok'=>'__deleted'));
		}

		function redirect($path,$msg=array()) {
			Session::S()->message=$msg;
			header("Location: ". $path);
			exit;
		}
		
		function genToken() {
			$token = Session::S()->token = uniqid('vmvc');
			return $token;
		}


		function message($msg=array()) {
			View::S()->messages = array_merge((array)View::S()->messages,$msg);
		}
	}
?>
